#include "date.h"

void test1()
{
    Date d1;
    Date d2(2024, 9, 30);
    d1.print();
    d2.print();

    Date d3 = d2;
    d3.print();

    d3 -= 1000;
    d3.print();

    Date d4 = d3 + 1000 ;
    d4.print();

    Date d5 = d4 - 1000 ;
    d5.print();
}

void test2()
{
    Date d1;
    d1.print(); // 9 15
    Date d2 = d1++;
    d1.print(); // 9 16
    d2.print(); // 9 15

    Date d3 = ++d2;
    d2.print(); // 9 16
    d3.print(); // 9 16
}


void test3()
{
    Date d1;
    d1.print(); // 9 15
    Date d2 = d1--;
    d1.print(); // 9 14
    d2.print(); // 9 15

    Date d3 = --d2;
    d2.print(); // 9 14
    d3.print(); // 9 14
}

void test4()
{
    Date d1;
    Date d2 = d1++;
    printf(d1==d2?"equal":"not equal");
    printf("\n");

    Date d3;
    Date d4 = ++d3;
    printf(d3==d4?"equal":"not equal");
    printf("\n");
}

void test5()
{
    Date d1;
    Date d2 = d1++;
    printf(d1!=d2?"not equal":"equal");
    printf("\n");

    Date d3;
    Date d4 = ++d3;
    printf(d3!=d4?"not equal":"equal");
    printf("\n");
}

void test6()
{
    Date d1;
    Date d2 = d1++;
    printf(d1>d2?"greate than":"not greate than");
    printf("\n");

    Date d3;
    Date d4 = ++d3;
    printf(d3>=d4?"greate equal":"not greate equal");
    printf("\n");
}

void test7()
{
    // Date d1(2023,2,29); // assert error
    Date d1(2023,2,28); 
    Date d2(2024,9,16);
    std::cout << d1 - d2 << std::endl;
    
}

void test8()
{
    // Date d1(2023,2,29); // assert error
    Date d1(2023,2,28); 
    Date d2(2024,9,16);
    // std::cout << d1 - d2 << std::endl;
    // cout << d1 << endl;
    d1 << std::cout<<"d1" << std::endl;
    d1.operator<<(std::cout) << "d2" << std::endl;

    std::cout << d2 << " end" << std::endl;

    Date d3;
    std::cin >> d2 >> d3;
    std::cout << d2 << std::endl << d3 << std::endl;
}

int main() 
{
    test1();
    test2();
    test3();
    test4();
    test5();
    test6();
    test7();
    test8();

    return 0;
}